package pe.gob.osinergmin.interfase_siaf.dac.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroDetalleDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Area;
import pe.gob.osinergmin.interfase_siaf.dac.domain.ControlCoa;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Ejecutora;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Expediente;
import pe.gob.osinergmin.interfase_siaf.dac.domain.ExpedienteIngreso;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroDetalle;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Mes;

@Repository("maestroDetalleDao")
public class MaestroDetalleDaoImpl implements MaestroDetalleDao {

    private final Log logger = LogFactory.getLog(getClass());
	
	
	private NamedParameterJdbcTemplate jdbcParameterTemplateData;	
	private JdbcTemplate jdbcTemplateData;	
	
	
	
	@Autowired
	public void SetDataSource(DataSource dataSourceData){
		this.jdbcTemplateData = new JdbcTemplate(dataSourceData);
		this.jdbcParameterTemplateData = new NamedParameterJdbcTemplate(dataSourceData);		
	}
	
	
    /*****CONCEPTOS PARA MESTRO DETALLE***/
	//TIPO_OPE
	private static final String SQL_SELECT_TIP_OPE ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_OPERACION','TIPO_OPERACION_GSN') ";
	private static final String SQL_SELECT_TIP_OPE_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_OPERACION','TIPO_OPERACION_GSN') AND cod_detall =:codDetall";
	private static final String SQL_SELECT_TIP_OPE_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_OPERACION','TIPO_OPERACION_GSN') AND nombre =:nombre";
    //MOD_COMP
	private static final String SQL_SELECT_MOD_COMP ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MODALIDAD_COMPRA' ";
	private static final String SQL_SELECT_MOD_COMP_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MODALIDAD_COMPRA' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_MOD_COMP_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MODALIDAD_COMPRA' AND nombre =:nombre";
	//TIPO_ID
	private static final String SQL_SELECT_TIP_ID ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_ID' ";
	private static final String SQL_SELECT_TIP_ID_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_ID' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_TIP_ID_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_ID' AND nombre =:nombre";
	//T_PAGO
	private static final String SQL_SELECT_T_PAGO ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_PAGO','TIPO_PAGO_CAL') ";
	private static final String SQL_SELECT_T_PAGO_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_PAGO','TIPO_PAGO_CAL') AND cod_detall =:codDetall";
	private static final String SQL_SELECT_T_PAGO_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr IN ('TIPO_PAGO','TIPO_PAGO_CAL') AND nombre =:nombre";
    //T_RECURS
	private static final String SQL_SELECT_T_RECURS ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_RECURSO' ";
	private static final String SQL_SELECT_T_RECURS_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_RECURSO' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_T_RECURS_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_RECURSO' AND nombre =:nombre";
	//T_COMPRO
	private static final String SQL_SELECT_T_COMPRO ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_COMPROMISO' ";
	private static final String SQL_SELECT_T_COMPRO_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_COMPROMISO' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_T_COMPRO_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_COMPROMISO' AND nombre =:nombre";
	//MONEDA
	private static final String SQL_SELECT_MONEDA ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MONEDA' ";
	private static final String SQL_SELECT_MONEDA_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MONEDA' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_MONEDA_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'MONEDA' AND nombre =:nombre";
	//TTIPO_DEPO
	private static final String SQL_SELECT_T_DEPOS ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_DEPOSITO' ";
	private static final String SQL_SELECT_T_DEPOS_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_DEPOSITO' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_T_DEPOS_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_DEPOSITO' AND nombre =:nombre";
	//TCON_DEPO
	private static final String SQL_SELECT_TCON_DEPOS ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'CONCEPTO_DEPOSITO' ";
	private static final String SQL_SELECT_TCON_DEPOS_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'CONCEPTO_DEPOSITO' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_TCON_DEPOS_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'CONCEPTO_DEPOSITO' AND nombre =:nombre";
	//TIP_PROC
	private static final String SQL_SELECT_TIP_PROC ="SELECT cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_PROCESO' ";
	private static final String SQL_SELECT_TIP_PROC_PARAMETER ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_PROCESO' AND cod_detall =:codDetall";
	private static final String SQL_SELECT_TIP_PROC_PARAMETER1 ="SELECT  cod_detall, nombre FROM maestro_detalle WHERE cod_maestr = 'TIPO_PROCESO' AND nombre =:nombre";
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////
	private static final String SQL_SELECT_ESTADO_CIERRE ="SELECT indicador_  FROM control_coa WHERE ano_coa =:anoCoa "
			+ " AND sec_ejec=:secEjec AND mes_coa =:mesCoa ";//indicadorCierre
		
	private static final String SQL_SELECT_ANO_EJE ="SELECT COUNT(ano_eje) FROM ejecutora WHERE ano_eje =:AnoEje";

	private static final String SQL_SELECT_SEC_EJEC ="SELECT COUNT(sec_ejec) FROM ejecutora WHERE sec_ejec =:SecEjec";	
	
	private static final String SQL_SELECT_MES_EJE ="SELECT COUNT(mes_eje) FROM mes WHERE mes_eje =:mesEje";	

	private static final String SQL_SELECT_T_COMPRO_PARAMETER9 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr = 'TIPO_COMPROMISO' AND cod_detall =:codDetall";
	
	private static final String SQL_SELECT_MONEDA_PARAMETER10 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr = 'MONEDA' AND cod_detall =:codDetall";
	
	private static final String SQL_SELECT_SEC_AREA ="SELECT COUNT(sec_area) FROM area WHERE sec_area =:secArea";

	private static final String SQL_SELECT_SECUENCIAL ="SELECT COUNT(secuencia) FROM expediente_ingreso WHERE secuencia =:secuencia";
	
	private static final String SQL_SELECT_T_RECURS_PARAMETER8 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr = 'TIPO_RECURSO' AND cod_detall =:codDetall";
	
	private static final String SQL_SELECT_T_PAGO_PARAMETER5 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr IN ('TIPO_PAGO','TIPO_PAGO_CAL') AND cod_detall =:codDetall";
	
	private static final String SQL_SELECT_CORRELATIV ="SELECT COUNT(correlativ) FROM expediente_ingreso WHERE correlativ =:correlativ";
	
	private static final String SQL_SELECT_MOD_COMP_PARAMETER6 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr = 'MODALIDAD_COMPRA' AND cod_detall =:codDetall";
	
	private static final String SQL_SELECT_TIP_OPE_PARAMETER5 ="SELECT  COUNT(cod_detall) FROM maestro_detalle WHERE cod_maestr IN ('TIPO_OPERACION','TIPO_OPERACION_GSN') AND cod_detall =:codDetall";
			
	private static final String SQL_SELECT_INTF_EXP ="SELECT COUNT(expediente) FROM expediente WHERE expediente =:expediente";
	
	
	
	/**IMPLEMENTACION DE METODOS*/
	@Override
	public List<MaestroDetalle> listarMaestroDetalleModCom() {		
		logger.info("Ingresando a listar Maestro detalle Mod_Com:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_MOD_COMP, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetModComParameter(MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle Mod_Com parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_MOD_COMP_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_MOD_COMP_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoOpe() {
		logger.info("Ingresando a listar Maestro detalle tipo operacion:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_TIP_OPE, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoOpeParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle tipo operacion parameters");
		logger.info("parameter 1:  "+maestroDet.getCodDetall()); 
		logger.info("parameter 2:  "+maestroDet.getNombre()); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_OPE_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_OPE_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoId() {
		logger.info("Ingresando a listar Maestro detalle tipo id:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_TIP_ID, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoIdParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle tipo id parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_ID_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_ID_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTPago() {
		logger.info("Ingresando a listar Maestro detalle t_pago:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_T_PAGO, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTPagoParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle t_pago parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_PAGO_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_PAGO_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTRecurs() {
		logger.info("Ingresando a listar Maestro detalle t_recurs:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_T_RECURS, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTRecursParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle t_recurs parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_RECURS_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_RECURS_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTCompro() {
		logger.info("Ingresando a listar Maestro detalle T_compro:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_T_COMPRO, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTComproParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle T_compro parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_COMPRO_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_COMPRO_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetMoneda() {
		logger.info("Ingresando a listar Maestro detalle moneda:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_MONEDA, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetMonedaParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle moneda parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_MONEDA_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_MONEDA_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoDepos() {
		logger.info("Ingresando a listar Maestro detalle tipo_deposito:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_T_DEPOS, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoDeposParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle tipo_deposito parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_DEPOS_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_T_DEPOS_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetConDesp() {
		logger.info("Ingresando a listar Maestro detalle Con_Depos:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_TCON_DEPOS, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetConDespParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle Con_Depos parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TCON_DEPOS_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TCON_DEPOS_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoPro() {
		logger.info("Ingresando a listar Maestro detalle tipo_proseso:"); 
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);
		return this.jdbcTemplateData.query(SQL_SELECT_TIP_PROC, lista); 
	}
	@Override
	public List<MaestroDetalle> listarMaestroDetTipoProParameter(
			MaestroDetalle maestroDet) {
		logger.info("Ingresando a listar Maestro detalle tipo_proseso parameters"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestroDet);
		RowMapper<MaestroDetalle> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroDetalle.class);	
		if(StringUtils.isNoneBlank(maestroDet.getCodDetall())){ 
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_PROC_PARAMETER, parameters, lista);	
		}else if(StringUtils.isNoneBlank(maestroDet.getNombre())){
			return this.jdbcParameterTemplateData.query(SQL_SELECT_TIP_PROC_PARAMETER1, parameters, lista);	
		}else{
			return null;
		}	
	}
	
	
	/**VALIDACION DE INGRESOS DETERMINADO (I-D)**/	
	@Override
	public int verificarAnoEje(Ejecutora e) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(e);		
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_ANO_EJE, parameters);	
	}
	
	
	@Override
	public int verificarSecEje(Ejecutora e) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(e);				
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_SEC_EJEC, parameters);	
	}	
	
	@Override
	public int verificarTipoOpe(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);		
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_TIP_OPE_PARAMETER5, parameters);	
	}	
	
	@Override
	public int verificarModComp(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_MOD_COMP_PARAMETER6, parameters);	
	}	
	
	@Override
	public int verificarTPago(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);		
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_T_PAGO_PARAMETER5, parameters);	
	}	
	
	@Override
	public int verificarTRecurs(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_T_RECURS_PARAMETER8, parameters);	
	}	
	
	@Override
	public int verificarTCompro(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_T_COMPRO_PARAMETER9, parameters);	
	}	
	
	@Override
	public int verificarMoneda(MaestroDetalle m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_MONEDA_PARAMETER10, parameters);	
	}
		
	@Override
	public int verificarMesEje(Mes m) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);		
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_MES_EJE, parameters);
	}
	
		
	@Override
	public int verificarSecArea(Area a) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(a);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_SEC_AREA, parameters);	
	}
	
	@Override
	public int verificarintfExp(Expediente e) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(e);		
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_INTF_EXP, parameters);	
	}	
		
	@Override
	public int verificarSecuencialExpe(ExpedienteIngreso e) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(e);				
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_SECUENCIAL, parameters);	
	}
	
	@Override
	public int verificarCorrelativExpe(ExpedienteIngreso e) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(e);			
	    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_CORRELATIV, parameters);	
	}
	
	/**VALIDAR ESTADO DE CIERRE**/
	@Override
	public List<ControlCoa> verificarEstadoCierre(ControlCoa c) throws Exception {		 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(c);
		RowMapper<ControlCoa> lista = ParameterizedBeanPropertyRowMapper.newInstance(ControlCoa.class);		
	    return this.jdbcParameterTemplateData.query(SQL_SELECT_ESTADO_CIERRE, parameters, lista);	
	}
	
	
	
	
}
